import { call, put, takeLatest } from 'redux-saga/effects'
import { CHANGE_BANNER_LIST, CHANGE_PRO_LIST, REQUEST_BANNER_LIST, REQUEST_PRO_LIST } from './types'
/*
    call: 用来触发请求方法用的
    put: 类似 dispatch 方法，用来触发事件用的
    takeLatest: 是用来监听执行一个任务用的
*/ 

import {getBannerListData, getProListData} from '../api/pro'

// 异步操作函数
function* getBannerListAction(){
    // 请求得到数据 res
    const res = yield call(getBannerListData)
    // 触发全局状态的修改函数
    yield put({
        type: CHANGE_BANNER_LIST,
        payload: res.data.data
    })
}

function* getProListAction(action){

    
    console.log(action);
    // 请求得到数据 res
    // 当数据请求的时候需要传递参数，可以在执行的方法后面进行添加
    const res = yield call(getProListData, action.payload)
    // 触发全局状态的修改函数
    yield put({
        type: CHANGE_PRO_LIST,
        payload: res.data.data
    })
}

// 监听异步函数的执行
function* mySaga(){

    // takeLatest 执行一个任务用的
    // takeLatest(是监听任务的名称, 监听到任务执行后要执行异步方法)
    yield takeLatest(REQUEST_BANNER_LIST, getBannerListAction)
    yield takeLatest(REQUEST_PRO_LIST, getProListAction)
}

export default mySaga